/**
* @desc 函数防抖---“立即执行版本” 和 “非立即执行版本” 的组合版本
* @param func 需要执行的函数
* @param wait 延迟执行时间（毫秒）
* @param immediate---true 表立即执行，false 表非立即执行
* 按钮点击使用方式：myClick：debounce((a,b,c)=>{},wait,immediate)
**/
export function debounce(func, wait = 500, immediate) {
  let timer
  return function() {
    const context = this
    const args = arguments
    if (timer) clearTimeout(timer)
    if (immediate) {
      var callNow = !timer
      timer = setTimeout(() => {
        timer = null
      }, wait)
      if (callNow) func.apply(context, args)
    } else {
      timer = setTimeout(function() {
        func.apply(context, args)
      }, wait)
    }
  }
}
/**
* @desc 函数节流---“立即执行版本” 和 “非立即执行版本” 的组合版本
* @param func 需要执行的函数
* @param wait 延迟执行时间（毫秒）
* @param immediate---true 表立即执行，false 表非立即执行
* 按钮点击使用方式：myClick：throttle((a,b,c)=>{},wait,immediate)
**/
export function throttle(fn, wait = 500, isImmediate = false) {
  var flag = true
  // eslint-disable-next-line no-unused-vars
  var timer = null
  return function() {
    if (flag) {
      isImmediate && fn.apply(this, arguments)
      flag = false
      timer = setTimeout(() => {
        !isImmediate && fn.apply(this, arguments)
        flag = true
      }, wait)
    }
  }
}
